In recent years, advances in digital computing hardware and software have resulted in a proliferation of mobile computing devices that come in a wide range of form factors including devices that are worn on the body of the user and handheld devices such as smartphones and tablets. Modern mobile computing devices incorporate numerous components including, but not limited to, single and multi-core central processing units (CPUs), graphical processing units (GPUs), random access memory (RAM), digital data storage devices such as solid-state drives (SSDs), radio transceivers that provide access to local area networks (LAN) and wide area networks (WAN), global positioning system (GPS) receivers, digital cameras, touch-input display screens, gyroscope and accelerometer sensors, and audio output devices. Mobile computing devices typically receive electrical power to operate the components from an integrated battery with a comparatively limited energy storage capacity. Thus, efficient operation of the components in the mobile computing device is important to extending the effective useful life of the device before the battery needs to be recharged or replaced.
In traditional computing applications, the CPU and more recently the GPU have been the predominant consumers of electrical power in the computing system. Existing techniques enable monitoring of the power for the CPU and GPU during operation of the computing system. In some embodiments, the CPU and GPU include integrated hardware power monitoring components that enable fine-grained reporting of the power consumption of the CPU and GPU based on the utilization rate of the components in the CPU and GPU. For example, a modern CPU typically includes multiple execution cores, cache, and peripheral components that are formed in a single integrated circuit. One or more of the cores in the CPU are utilized when executing program instructions, but a typical CPU also spends a large fraction of the time in an idle state where the entire CPU or various components in the CPU do not execute programmed instructions. Modern CPUs include dynamic clock speed adjustments, power gating, and other power control techniques that reduce the power consumption of the CPU when one or more components in the CPU are idle or utilized at less than full capacity. For example, in one operating mode a CPU with four execution cores executes a series of program instructions with a single CPU core while the remaining cores are idle. The CPU reduces the clock speed of the idle cores, and optionally deactivates the idle cores completely, while the active core consumes more power during execution of the program instructions. Power monitoring hardware in the CPU enables identification of the power consumption of components in the CPU with high precision based on the utilization of the different components in the CPU. Modern GPUs similarly include different power states based on utilization and include similar power monitoring capabilities. CPUs and GPUs in mobile devices are typically integrated in a single system on a chip (SoC) configuration and can be considered as a single device with different sub-components for power consumption monitoring in some embodiments. Existing software applications can retrieve information about the power consumption of the CPU and GPU and identify the power consumption of individual software programs with reference to the utilization rates of the CPU/GPU and the programs that utilize the CPU/GPU during operation.
While monitoring the power consumption in the CPU and GPU is useful in determining a portion of the energy consumption in a computing device, the CPU and GPU are only responsible for a fraction of the power consumption in a modern computing device. In all computing devices, and mobile devices particularly, the additional components in the computing device often consume a significant portion of the total system power in different operating modes. Some existing mobile devices include coarse-grained power consumption monitoring capabilities that enable identification of the aggregate power consumption for the entire mobile device, and some existing power monitoring solutions further monitor the aggregate energy consumption of individual components within the mobile device. Identification of the energy consumption of components in the computing device beyond the prior art techniques for measuring CPU power consumption during the execution of software programs would be beneficial. Additionally, fine-grained identification of the portions of a software program that consume energy during execution of the program would be beneficial.